package com.liuyz.demo2;

public class 静态内部类 {
    public static void main(String[] args) {
        new Outer04().m3();
        System.out.println("==========");
        new OtherOuter04().o1();
        System.out.println("==========");
        new OtherOuter04().o2();
    }
}

class Outer04 { // 外部类
    private int n1 = 100; // 外部类的普通属性
    private static int n2 = 200; // 外部类的静态属性
    private static int n3 = 300; // 外部类的静态属性

    private void m1() { // 外部类的普通方法
        System.out.println("Outer04->m1()");
    }

    private static void m2() { // 外部类的静态方法
        System.out.println("Outer04->m2()");
    }

    static class Inner04 { // 静态内部类

        private static int n3 = 400; // 静态内部类的静态属性

        public void i1() {
            System.out.println("Outer04->n2->" + n2); // 外部类的静态属性
            m2(); // 外部类的静态方法
            System.out.println("Inner04->n3->" + n3); // 静态内部类的静态属性
            System.out.println("Outer04->n3>" + Outer04.n3); // 外部类的静态属性
        }

    }

    public void m3() {
        // 外部类访问静态内部类
        Inner04 inner04 = new Inner04(); // 创建静态内部类对象
        inner04.i1(); // 通过静态内部类对象调用方法
    }

    // 在外部类中编写一个可以返回静态内部类的对象的方法
    public Inner04 getInner04() {
        return new Inner04();
    }

}

class OtherOuter04 { // 其他外部类
    public void o1() {
        // 外部其他类访问静态内部类：方式一
        Outer04.Inner04 inner04 = new Outer04.Inner04(); // 直接创建外部类的静态内部类对象
        inner04.i1(); // 通过静态内部类对象调用方法
    }

    public void o2() {
        // 外部其他类访问静态内部类：方式二
        Outer04.Inner04 inner04 = new Outer04().getInner04(); // 在外部其他类中调用方法获取静态内部类的对象
        inner04.i1(); // 通过静态内部类对象调用方法
    }
}
